阅读更多

2顶
3踩

企业架构
     经过一段时间紧张的开发工作,bbossgroups-3.2 发布了,支持对象xml序列化功能。相比3.1,这个版本做了非常大的改进和功能扩展,优化aop/ioc体系结构,并且基于ioc技术开发出了独具特色的对象序列化技术;mvc、持久层、标签库、任务调度都做了很大的改进;开发文档和培训ppt更加全面,在iteye开辟了bbossgroups专栏:
http://bbossgroups.group.iteye.com/group/wiki,可以在第一时间将框架的最新动态呈现给大家。
总体来说,3.2是自bbossgroups第一个版本发布以来,功能最完善、最稳定的一个版本,完全可以非常好地支撑起j2ee项目各个方面的开发工作。

bbossgroups project contain follow subprojects:
1.bboss-aop, an aop framework.(ioc ,rpc[jms,mina,jgroups,cxf webservice,rmi,netty,rest,组播,多播],
    bean component,cxf webservice component framworkset,jms components frameworkset,plugin security components and so on).
2.bboss-persistent, a persistent framework().
a.灵活的事务管理(声明式事务管理,可编程事务管理,java注解事务管理,jdbctemplate事务管理,五种经典的事务类型,支持事务嵌套,支持多数据库分布式事务)
b.灵活的访问数据库的接口(普通sql操作,预编译sql操作,普通/预编译批处理操作,存储过程,函数)
c.一套经典的数据库操作标签库(增删改查,普通sql操作,预编译sql操作,普通/预编译批处理操作)
d.经典的多数据库连接池配置管理和使用方法(所有的数据库操作接口可以直接指定连接池的名称,方便地实现对不同数据库的操作)
3.bboss-taglib, a web layer taglib framework(list tag,pageine list tag,detail tag ,logic tag,tree tag,tabpane tag,dbutil tag).
4.bboss-event, an event framework(local event,remote distribute event framework base aop rpc framework).
5.bboss-util, an utility framework.
6.bboss-soa:3.2版本新增模块,实现对象-xml序列化与反序列化功能
7.antbuildall, ant build project that build up projects.可以运行antbuildall下的run.bat命令编译所有的子项目,并且更新相应工程的依赖jars。
8.apache-ant-1.7.1 所有工程构建依赖的ant环境,bbossgroups的构建无需依赖外部ant环境,每个子工程下都有相应的执行ant的bat命令文件,直接运行这些bat就可以构建相应的
            工程,构建的目标文件存放在相应工程的distrib目录下面。
            bbossaop\run.bat
            bbossevent\run.bat
            bboss-mvc\build.bat
            bboss-persistent\run.bat
            bboss-taglib\run.bat
            bboss-util\run.bat
9.bboss-mvc,bboss mvc 框架隶属于开源项目bbossgroups,是基于bboss aop框架开发的轻量级mvc框架,提供以下功能:单方法action,多方法action,注解action 支持restful
            提供数据绑定功能提供国际化功能提供自定义主题功能提供一套界面展示标签提供数据自动校验功能,
            bboss-mvc提供多文件上传功能的支持,分页控制器的支持。能够非常方便地和jquery,exjs等流行的技术框架使用。

10.文档 目录包含mvc框架开发文档、framework 开发文档和bboss aop框架的技术使用文档、ppt培训文档等等

11.bbossgroups-min-eclipse.zip 框架最小依赖eclipse工程demo(mvc,taglib,aop,persistent,object servializable)
mvc:包含mvc,taglib,aop/ioc最小依赖eclipse工程和测试用例
persistent:包含persistent框架最小依赖eclipse工程和测试用例
xmlserializable:包含对象xml序列化技术最小依赖eclipse工程和测试用例


bboss group project blog:
http://yin-bp.javaeye.com/

bboss group project sourceforge site url:
http://sourceforge.net/projects/bboss/files/

release version : bbossgroups-3.2
release date: 2011/06/12
-----------------------------------------------------------------------------------------------****
release futures:

************************************************bbossgroups-3.2******************************
------2011-06-10------------
o 修正SQLExecutor中泛型字段查询API中的类型转换漏洞
------2011-06-09------------
o 处理空字符串向日期类型转换后台报异常的缺陷
------2011-06-09------------
o 注解控制器可以不用添加注解@Controller也可以被框架识别了
------2011-06-8------------
o 修正不正常的提示信息,externaljndiName
o 修复只配置外部数据源的情况下,pool启动堆栈溢出问题
    java.lang.StackOverflowError
at java.lang.Thread.currentThread(Native Method)
at org.apache.xerces.util.SecuritySupport12$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.xerces.util.SecuritySupport12.getContextClassLoader(Unknown Source)
at org.apache.xerces.util.ObjectFactory.findClassLoader(Unknown Source)
at org.apache.xerces.impl.dv.DTDDVFactory.getInstance(Unknown Source)
at org.apache.xerces.impl.dv.DTDDVFactory.getInstance(Unknown Source)
at
修改程序清单:
com.frameworkset.common.poolman.sql.PoolMan
com.frameworkset.common.poolman.util.JDBCPool
com.frameworkset.common.poolman.util.SQLManager
com.frameworkset.common.poolman.util.SQLUtil
public static JDBCPool getJDBCPoolByJNDIName(String jndiname)
        {
            JDBCPool pool = SQLUtil.getSQLManager().getPoolByJNDIName(jndiname,true);
            return pool;
        }
       
        public static JDBCPool getJDBCPoolByJNDIName(String jndiname,boolean needcheckStart)
        {
            JDBCPool pool = SQLUtil.getSQLManager().getPoolByJNDIName(jndiname,needcheckStart);
            return pool;
        }

------2011-06-06------------
o 完善responsebody注解功能,增加datatype和charset两个属性
datatype:json,xml等值,用来指出输出数据的content类型
charset:用来指出reponse响应字符编码
详细使用方法请参考测试用例
org.frameworkset.web.enumtest.EnumConvertController
org.frameworkset.web.http.converter.json.JsonController
------2011-06-04------------
o 逻辑标签可以独立于list和beaninfo标签使用,增加以下属性:
<attribute>
<name>requestKey</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>sessionKey</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>pageContextKey</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>parameter</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>actual</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
通过以上属性,可以方便地制定逻辑标签的期望值,
requestKey:指定从request的attribute属性中获取实际值,
sessionKey:指定从session的attribute属性中获取实际值,
pageContextKey:指定从pageContext的attribute属性中获取实际值,
parameter:指定从request的parameter中获取实际值
actual:直接指定实际值,可以是具体的值,也可以是一个el变量
上述属性还可以和property属性结合起来获取值对象中的属性值
------2011-06-04------------
o request和session标签增加日期dateformat格式属性

------2011-06-03------------
o 修复config标签enablecontextmenu属性不能正常工作的漏洞
------2011-06-2------------
o 修复使用Column注解设置对象属性与列名映射时,导致sql语句中绑定相应的属性变量值失败的漏洞

------2011-05-28-----------
o 修复quartz引擎加载带参数方法任务时,后台抛空指针异常,这是3.1版本产生的新问题,影响新
版本的使用
o 完善任务调度管理组件org.frameworkset.task.TaskService
完善stopService方法和startService方法,解决停止引擎后,无法启动引擎的问题,增加方法stopService(boolean force)
增加方法,一边在执行public void deleteJob(String jobname, String groupid)方法后重新加载作业
public void startExecuteJob(String groupid, String jobname)
------2011-05-28------------
o 支持Map<Key,PO>类型参数绑定机制,通过这种机制可以非常方便地将表单提交过来的一个对象集合数据
根据key对应的字段值,形成Map索引对象。
使用方法如下:
public String mapbean(@MapKey("fieldName") Map<String,ListBean> beans, ModelMap model) {
String sql = "INSERT INTO LISTBEAN (" + "ID," + "FIELDNAME,"
+ "FIELDLABLE," + "FIELDTYPE," + "SORTORDER,"
+ " ISPRIMARYKEY," + "REQUIRED," + "FIELDLENGTH,"
+ "ISVALIDATED" + ")" + "VALUES"
+ "(#[id],#[fieldName],#[fieldLable],#[fieldType],#[sortorder]"
+ ",#[isprimaryKey],#[required],#[fieldLength],#[isvalidated])";
TransactionManager tm = new TransactionManager();
try {
if(beans != null)
{
List temp =  convertMaptoList( beans);

tm.begin();
SQLExecutor.delete("delete from LISTBEAN");
SQLExecutor.insertBeans(sql, temp);
tm.commit();
model.addAttribute("datas", temp);
}
} catch (Exception e) {
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated catch block
e.printStackTrace();
}

return "path:mapbean";
}
详情请参考测试用例:
/bboss-mvc/WebRoot/WEB-INF/bboss-mapbean.xml
------2011-05-26------------
o 新增empty和notempty两个逻辑标签使用方法和null、notnull一样
empty判断指定的字段的值是否是null,或者空串,如果条件成立,则执行标签体中的逻辑
notempty判断指定的字段的值既不是null也不是空串,则执行标签体得内容
------2011-05-24------------
o 修改null和notnull标签不能正确工作的问题
o 修复detail标签的提示信息不是很正确的问题
###################################################################################
------2011-05-20------------
o 修复引用容器datasource漏洞
o 修复通过模板启动数据源参数设置问题
o 修复一系列空指针问题
o 修复使用外部数据源时,当外部数据源是oracle时无法获取数据源的元数据问题,必须制定相应数据库的驱动程序,否则无法初始化正确的dbadapter
------2011-05-20-----------
o 增加rmi服务发布和rmi客服端组件获取功能
发布服务方法,通过 rmi:address指定发布服务的唯一地址:
<property name="rmi_service_test"
rmi:address="rmi_service_test"
class="org.frameworkset.spi.remote.rmi.RMIServiceTest"/>
服务器port的指定在rmi协议配置文件中:
/bbossaop/resources/org/frameworkset/spi/manager-rpc-rmi.xml
<!--
服务器绑定端口
-->
<property name="connection.bind.port" value="1099" />

rmi客服端组件配置和获取:
配置
<property name="rmi_service_client_test" factory-class="org.frameworkset.spi.remote.rmi.RMIUtil" factory-method="lookupService">
<construction>
<property name="servicaddress" value="//172.16.25.108:1099/rmi_service_test"/>
</construction>
</property>

获取:
BaseApplicationContext context ;
@Before
public void init()
{
context = ApplicationContext.getApplicationContext("org/frameworkset/spi/remote/rmi/rmi-client.xml");
}
@Test
public void test() throws RemoteException
{
RMIServiceTestInf test = (RMIServiceTestInf)context.getBeanObject("rmi_service_client_test");
System.out.println(test.sayHello("多多"));
}
------2011-05-17------------
o 修复sqlexecutor对日期类型timestamp处理丢失时分秒的缺陷



------2011-05-15-----------
o 改进国际化机制,每个组件容器相关的国际化文件必须和组件容器的根配置文件在同级目录,并且名称以下格式命名:
messages_en_US.properties
messages_zh_CN.properties
o 改进sql配置文件刷新机制,将3.1版本中每个sql配置文件定义一个守护进程改为单一守护进程检测机制,即所有的sql文件是否
变更的检测由一个守护进程完成,这个进程中维护一个文件队列,刷新事件配置也由manager-provider.xml文件改为:
/bbossaop/src/aop.properties中配置:
sqlfile.refresh_interval=5000
同时将sql配置文件的管理容器改为SOAFileApplicationContext,以便提升系统性能


------2011-05-11-----------
o 改进ApplicationContext,WebApplicationContext容器,分离出SOAApplicationContext、BaseApplicationContext和DefaultApplicationContext三个类型的容器,他们的职责分别为:
ApplicationContext:和原来的功能ApplicationContext的功能一致,包括基本的aop/ioc功能,远程服务,全局属性管理,拦截器,包含声明式事务管理,是BaseApplicationContext的子类
SOAApplicationContext/SOAFileApplicationContext:两个轻量级的ioc容器,包含全局属性管理,不包含远程服务,拦截器,不包含声明式事务管理,是DefaultApplicationContext的子类
DefaultApplicationContext:和ApplicationContext的区别就是不包含远程服务的功能,和远程服务相关的组件没有依赖关系,是BaseApplicationContext的子类
BaseApplicationContext:是一个抽象容器,所有的上层容器都间接或直接实现了这个容器,提供公共的基础功能。
WebApplicationContext:是mvc框架的控制器和业务组件管理容器,是DefaultApplicationContext的子类,拥有DefaultApplicationContext的所有功能。

------2011-05-11------------
o 完善restful实现机制,可以支持对控制器方法级别的restful全地址映射关系并修复了部分缺陷,3.0版本需要根据类级别和方法级别地址组合才能实现
  restful风格的功能,而且存在缺陷。
o aop框架中实现对象与xml相互转化功能

------2011-05-06------------
o 修复循环依赖机制漏洞
o 修复quartz任务调度导致模块中没有配置任何任务时,后台抛出类型转换异常
o 修复3.0版本中没有将组件实例机制定义为单例模式的漏洞,但是ppt培训教程中却明确指出该版本中的组件默认为单例模式

上述3个漏洞修复的程序为:
/bbossaop/src/org/frameworkset/spi/assemble/BeanAccembleHelper.java
/bbossaop/src/org/frameworkset/spi/assemble/Pro.java
/bbossaop/src/org/frameworkset/spi/assemble/ProviderParser.java
------2011-05-06------------
o 修复分页标签偶尔找不到vm模板文件的漏洞
上述漏洞修复的程序为:
/bboss-util/src/com/frameworkset/util/VelocityUtil.java
------2011-05-03------------
o 修复在事务环境下通过JDBCPool的方法
public TableMetaData getTableMetaDataFromDatabase(Connection con,
String tableName)
获取不到特定数据源的表元数据的问题
------2011-05-03------------
o 修复preDBUtil.preparedSelect(params, dbName, sql, offset, long)
在查询没有数据的情况下,preDBUtil.getMeta()返回的是null;


release version : bbossgroups-3.1
release date: 2011/05/02
-----------------------------------------------------------------------------------------------****
release futures:
------2011-04-30------------
o mvc框架绑定参数注解指定日期转换格式,以便保证按原始数据格式将参数转换为正确的日期
o mvc框架可以将日期类型(java.util.Date/java.sql.Date/java.sql.Timestamp)转换为long类型数据,也可以将long数据转换为日期类型(java.util.Date/java.sql.Date/java.sql.Timestamp),
也可以进行long数组和日期类型(java.util.Date/java.sql.Date/java.sql.Timestamp)数组的相互转换
o 修复mvc框架控制器组件解析异常:
java.lang.IllegalArgumentException: Class must not be null
at org.frameworkset.util.Assert.notNull(Assert.java:112)
at org.frameworkset.util.annotations.AnnotationUtils.findAnnotation(AnnotationUtils.java:129)
at org.frameworkset.web.servlet.handler.HandlerUtils.determineUrlsForHandler(HandlerUtils.java:1965)
------2011-04-25------------
o 持久层框架中修复获取数字类型的值时,一旦rs中返回null时,没有正确获取数字缺省值的问题
ValueExchange.convert方法

o 标签库中修改字符串过滤器,解决jquery或者ajax数据请求时,分页查询的中文乱码问题,改进字符串过滤器的性能

------2011-04-24------------
o 改进webservice服务装载功能,可以从mvc和所有的applicationcontext中配置和装载webservice服务:
Mvc框架的ws服务无需特殊处理
普通的applicationcontext容器中的ws服务对应的模块配置文件需要配置在org/frameworkset/spi/ws/webserivce-modules.xml文件中

------2011-04-21------------
o 增加组件异步调用机制,使用方法参考测试用例:
/bbossaop/test/org/frameworkset/spi/asyn/AsynbeanTest.java
可以通过Async注解标注组件中需要异步执行的方法即可,可以指定超时时间,是否需要返回结果,是否需要回调处理返回结果

------2011-04-20------------
o 完善Pro对象对ProList,ProSet,ProMap,ProArray的处理机制
o ApplicationContext组件新增一组获取ProArray对象的接口
public ProArray getArrayProperty(String name) ;
public ProArray getProArrayProperty(String name, ProArray defaultValue) ;

o 新增convert标签,支持字典数据值向名称的转换
其中的datas为一个map属性映射值,name对应于key,convert标签通过name获取到对应的属性值
然后显示到页面上,如果对应的值没有那么输出defaultValue对应的值,如果没有设置defaultValue
那么直接输出name。
<pg:convert convertData="datas" colName="name" defaultValue=""/>
pager-taglib.tld
frameworkset.jar
------2011-04-18------------
o 解决获取空的ProList时导致aop框架启动失败的问题
o 完善事务泄露检测机制,在manager-provider.xml中增加检测页面地址类型配置:
<!-- 数据库事务泄露检测url类型范围配置 -->
<property name="transaction.leakcheck.files" >
<array componentType="String">
<property value=".jsp"/>
<property value=".do"/>
<property value=".page"/>
<property value=".action"/>
<property value=".ajax"/>
</array>
</property>
------2011-04-16------------
o 完善带返回值的事务管理模板组件支持泛型类型的返回
public void stringarraytoList(final List<ListBean> beans) throws Throwable {
List<ListBean> ret = TemplateDBUtil.executeTemplate(
new JDBCValueTemplate<List<ListBean>>(){
public List<ListBean>  execute() throws Exception {
String sql = "INSERT INTO LISTBEAN (" + "ID," + "FIELDNAME,"
+ "FIELDLABLE," + "FIELDTYPE," + "SORTORDER,"
+ " ISPRIMARYKEY," + "REQUIRED," + "FIELDLENGTH,"
+ "ISVALIDATED" + ")" + "VALUES"
+ "(#[id],#[fieldName],#[fieldLable],#[fieldType],#[sortorder]"
+ ",#[isprimaryKey],#[required],#[fieldLength],#[isvalidated])";
SQLExecutor.delete("delete from LISTBEAN");
SQLExecutor.insertBeans(sql, beans);
return beans;
}
}
);
}
o 解决主页面通过ajax方式加载多个分页页面时,跳转功能不能正常使用的问题,以及提示信息中文乱码问题

------2011-04-14------------
o mvc中传递给分页标签的导航路径修改为带上下文的绝对地址,以免在使用jquery模式局部分页时,主页面的相对地址和分页对应的页面的相对路径不一致时,不能正确地进行分页导航
------2011-04-13------------
o 控制器方法中增加Map类型参数绑定机制,可以将request中的参数转换为Map对象,当参数是数组时存入数组值,否则存入单个值
------2011-04-11------------
o 完善ConfigSQLExecutor和SQLExecutor组件中所有和bean对象相关的接口,
Object bean参数可以是普通的的值对象,也可以是一个SQLParams对象,也可以是一个Map对象
使用方法参考测试用例:
/bboss-persistent/test/com/frameworkset/sqlexecutor/ConfigSQLExecutorTest.java




------2011-04-11------------
o 新增array元素,通过该元素可以实现各种类型数组数据的注入功能
------2011-04-07------------
o  修改DaemonThread进程,支持从外部指定刷新文件资源的时间间隔。
o 完善ApplicationContext组件的生命周期管理机制
o ApplicationContext组件增加获取long值属性的api
------2011-04-11------------
o 新增array元素,通过该元素可以实现各种类型数组数据的注入功能
------2011-04-07------------
o 增加根据变量名称从配置文件中获取sql语句的来操作数据库组件,对应sql配置文件提供定时刷新机制
  如果检测到sql文件被修改,就从新加载文件(前提是开启刷新机制)
com.frameworkset.common.poolman.ConfigSQLExecutor
具体的使用方法为:
ConfigSQLExecutor executor = new ConfigSQLExecutor("com/frameworkset/sqlexecutor/sqlfile.xml");
Map dbBeans  =  executor.queryObject(HashMap.class, "sqltest");
String result = executor.queryFieldBean("sqltemplate", bean);
配置文件:

<?xml version="1.0" encoding='gb2312'?>
<properties>
<description>
<![CDATA[
sql配置文件
可以通过名称属性name配置默认sql,特定数据库的sql通过在
名称后面加数据库类型后缀来区分,例如:
sqltest
sqltest-oracle
sqltest-derby
sqltest-mysql
等等,本配置实例就演示了具体配置方法
]]>
</description>
<property name="sqltest"><![CDATA[select * from LISTBEAN]]>
</property>
<property name="sqltest-oracle"><![CDATA[select * from LISTBEAN]]>
</property>
<property name="sqltemplate"><![CDATA[select FIELDNAME from LISTBEAN where FIELDNAME=#[fieldName]]]>
</property>
<property name="sqltemplate-oracle"><![CDATA[select FIELDNAME from LISTBEAN where FIELDNAME=#[fieldName]  ]]>
</property>
<property name="dynamicsqltemplate"><![CDATA[select *  from CIM_ETL_REPOSITORY  where 1=1
#if($HOST_ID && !$HOST_ID.equals("")) and HOST_ID = #[HOST_ID] #end 
and PLUGIN_ID = #[PLUGIN_ID] and CATEGORY_ID = #[CATEGORY_ID] and APP = #[APP]]]>
</property>
</properties>

刷新机制的配置方法:
在manager-provider.xml文件中添加以下配置项即可:
<property name="sqlfile.refresh_interval" value="10000"/>
当value大于0时就开启sqlfile文件的更新检测机制,每隔value指定的时间间隔就检测一次,有更新就重新加载,否则不重新加载

o 完善ApplicationContext组件的生命周期管理机制
o ApplicationContext组件增加获取long值属性的api
o 完善mvc框架配置文件导入方式
可以用,号分隔导入子目录下的配置文件,例如:
<servlet>
<servlet-name>mvcdispather</servlet-name>
<servlet-class>org.frameworkset.web.servlet.DispatchServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/bboss-*.xml,
/WEB-INF/conf/bboss-*.xml</param-value>
</init-param>
。。。。。。
</servlet>

------2011-04-05------------
o 控制器方法增加枚举类型,枚举数组类型参数的绑定功能
------2011-03-31------------
o 跳转路径可以通过path:元素直接指定,而无需注入
具体使用方法,参考demo
WebRoot/WEB-INF/bboss-path.xml

------2011-04-06------------
o 增加一组查询单个字段的泛型接口,使用方法如下:
String sql = "select REQUIRED from LISTBEAN ";
int id=  SQLExecutor.queryTField(int.class, sql);
long id=  SQLExecutor.queryTField(long.class, "select seq_name.nextval from LISTBEAN ");
String sql = "select FIELDLABLE from LISTBEAN ";
String id=  SQLExecutor.queryTField(String.class, sql);
System.out.println(id);
o 3.0api增加返回List<HashMap>结果集的查询接口支持,使用方法如下(以预编译语句为例):
@Test
public void queryListMap() throws SQLException
{
String sql = "select * from LISTBEAN name=?";
List<HashMap> dbBeans  =  SQLExecutor.queryListWithDBName(HashMap.class, "mysql", sql,"ttt");
System.out.println(dbBeans);
}


public void queryListMapWithbeanCondition() throws SQLException
{
String sql = "select * from LISTBEAN name=#[name]";
ListBean beanobject = new ListBean();
beanobject.setName("duoduo");
List<HashMap> dbBeans  =  SQLExecutor.queryListWithDBName(HashMap.class, "mysql", sql,beanobject);
System.out.println(dbBeans);
}

@Test
public void queryMap() throws SQLException
{
String sql = "select * from LISTBEAN ";
Map dbBeans  =  SQLExecutor.queryObject(HashMap.class, sql);
System.out.println(dbBeans);
}

------2011-03-30------------
o 3.0api中完善对java.util.Date类型对象属性数据的处理

o 修复mvc实现分页功能时,通过handleMapping注解指定的url路径无法进行分页的bug,修改的程序如下:

------2011-03-20------------
o 改进右键菜单功能,提升右键菜单性能,涉及的功能有:使用右键菜单的树标签和使用右键菜单的列表、分页标签,以及所有其他相关的页面


o 修复jms不能发送长度为0的jms消息bug
/bbossaop/src-jms/org/frameworkset/mq/RequestDispatcher.java

------2011-03-10------------

o 将组件管理模式默认为设置为单例模式
------2011-03-09------------

o 扩展list,map,set元素类型定义,添加componentType属性,用来标识容器中存放的对象类型,componentType的取值范围如下:
bean:标识容器元素对象类型是组件对象类型
String:标识容器元素对象类型是String对象

该属性可以用来方便将组件类型的list和字符串类型的list注入到其他组件中。

相应地在ProList、ProMap、ProSet对象上增加了以下方法:
ProList: public List getComponentList()
ProMap:public Map getComponentMap()
ProSet:public Set getComponentSet()

使用案例如下:

<property name="/index.htm,/detail.htm"
      f:demo_sites="attr:demo_sites"
    class="org.frameworkset.web.demo.SiteDemoController" singlable="true"/>
   
<property name="demo_sites">
<list componentType="bean">
<property f:name="listbean"
f:cnname="集合po对象绑定实例"
class="org.frameworkset.web.demo.SiteDemoBean">
<property name="controllerClass" value="D:/workspace/bbossgroup-2.0-RC2-mvc/bboss-mvc/test/org/frameworkset/spi/mvc/ListBeanBindController.java"/>
<property name="configFile" value="D:/workspace/bbossgroup-2.0-RC2-mvc/bboss-mvc/WebRoot/WEB-INF/bboss-listbean.xml"/>
<property name="visturl">
<list componentType="String">
<property value="/databind/showstringarraytoList.htm"/>
<property value="/databind/showlist.htm"/>
</list>
</property>
<property name="formlist">
<list  componentType="bean">
<property f:formPath="D:/workspace/bbossgroup-2.0-RC2-mvc/bboss-mvc/WebRoot/jsp/databind/table.jsp"
f:charset="UTF-8"
class="org.frameworkset.web.demo.FormUrl">
<property name="description"><![CDATA[
表单table.jsp, 对应于/databind/showlist.htm跳转页面
]]></property>
</property>
<property f:formPath="D:/workspace/bbossgroup-2.0-RC2-mvc/bboss-mvc/WebRoot/jsp/databind/stringarraytoList.jsp"
class="org.frameworkset.web.demo.FormUrl">
<property name="description"><![CDATA[
表单stringarraytoList.jsp, 对应于/databind/showstringarraytoList.htm跳转页面
]]></property>
</property>
<property f:formPath="D:/workspace/bbossgroup-2.0-RC2-mvc/bboss-mvc/WebRoot/jsp/databind/tableinfo.jsp"
class="org.frameworkset.web.demo.FormUrl">
<property name="description"><![CDATA[
表单/bboss-mvc/WebRoot/jsp/databind/tableinfo.jsp, 对应于/databind/showbean.htm跳转页面
]]></property>
</property>
</list>
</property>
<property name="description"><![CDATA[
集合po对象绑定实例 字符串数组转List数据绑定实例
]]></property>
</property>
</list>
</property>

类如下:SiteDemoController

public class SiteDemoController {
private List<SiteDemoBean> demo_sites;

public String index(ModelMap model)
{
model.addAttribute("demobeans", demo_sites);
return "index";
}

public String detail(ModelMap model,@RequestParam(name="demoname") String demoname)
{
SiteDemoBean bean = null;
for(int i = 0; i < demo_sites.size(); i ++)
{
SiteDemoBean bean_ = demo_sites.get(i);
if(demoname.equals(bean_.getName()))
{
bean = bean_;
break;
}

}
model.addAttribute("demobean", bean);

return "seconddetail";
}

/**
* @return the demo_sites
*/
public List<SiteDemoBean> getDemo_sites() {
return demo_sites;
}

/**
* @param demoSites the demo_sites to set
*/
public void setDemo_sites(List<SiteDemoBean> demoSites) {
demo_sites = demoSites;
}

}

------2011-03-30------------
o 3.0api中完善对java.util.Date类型对象属性数据的处理
------2011-03-06------------
o 修复树标签复选框点击事件firefox兼容性问题
o 修复树标签默认选中节点上面设置点击事件时Boolean值向String转换异常问题
------2011-03-04------------
o 增加一个根据参数启动数据源的api,可以控制数据源是连接池数据源还是非连接池数据源
DBUtil中增加以下静态方法:
public static void startPool(String poolname,String driver,String jdbcurl,String username,String password,
        String readOnly,
        String txIsolationLevel,
        String validationQuery,
        String jndiName,  
        int initialConnections,
        int minimumSize,
        int maximumSize,
        boolean usepool,
        boolean  external,
        String externaljndiName       
        )
       
o 数据源配置文件中增加usepool元素 ,可以控制数据源是连接池数据源还是非连接池数据源
<?xml version="1.0" encoding="gb2312"?>
<poolman>
<datasource>
<dbname>bspf</dbname>
<loadmetadata>false</loadmetadata>
<jndiName>jdbc/mysql-ds</jndiName>
<driver>oracle.jdbc.driver.OracleDriver</driver>
<usepool>false</usepool>
<url>jdbc:oracle:thin:@//172.16.25.139:1521/dtjf</url>
<username>dtjf</username>
<password>dtjf</password>
<txIsolationLevel>READ_COMMITTED</txIsolationLevel>
    <logAbandoned>true</logAbandoned>
<readOnly>false</readOnly>
<keygenerate>composite</keygenerate>
<autoprimarykey>false</autoprimarykey>
<showsql>false</showsql>
</datasource>
</poolman>      

o 调整非连接池数据源的监控数据采集和相关属性展示接口
------2011-03-02------------

o 修改odbc 驱动下使用o/r mapping查询,大字段处理异常问题
o 扩展SQLExecutor组件增加所有查询List结果集方法对泛型的支持
o 修复double类型数据向int类型转换的问题,新增单个值转换为数组的功能,支持数字类型数组之间的相互转换

------2011-03-02------------
o  util包中修复double类型数据向int类型转换的问题,新增单个值转换为数组的功能,支持数字类型数组之间的相互转换

release version : bbossgroups-3.0
release date: 2011/02/26
-----------------------------------------------------------------------------------------------****
release futures:

1.bbossgroups-3.0相比bbossgroups-2.0-RC1最大的变化是,作者利用短短三个月的时间开发的一套mvc框架即bboss-mvc子项目。为了开发mvc框架,对bboss aop,bboss persistent,bboss taglib,bboss util做了功能扩展。

2.bboss aop框架新的功能有
增加了国际化的支持
引入新的组件的创建机制-工厂模式
完善rpc异常处理机制
rpc协议增加对http/https协议的支持

增加rpc.evaluatelocaladdress配置参数
/bbossaop/resources/org/frameworkset/spi/manager-rpc-service.xml
rpc.evaluatelocaladdress的作用如下:
是否对远程地址进行本地地址校验,如果设置为true
则对远程地址进行本地地址判断,如果是local地址将转换为本地调用,否则执行远程调用
如果设置为false,一律当成远程方法调用
默认为false
------------------------------------------------------------------
2010-09-27
------------------------------------------------------------------
o 完善rpc异常处理机制
客服端调用远程组件服务时,对于服务端抛回的异常(业务异常和RemoteException),并将业务异常统一封装为
RemoteException,这样就导致客户端程序无法直接捕获服务端的业务异常。进行修复后直接将业务异常直接返回给
客服端。

o 修复http/https协议的相关问题


2010-09-19
------------------------------------------------------------------
o 修复RPCRequest可能的死锁隐患
------------------------------------------------------------------
2010-09-16
------------------------------------------------------------------
o 增加http/https协议的支持
http协议的服务器可以独立的http server,也可以是tomcat,jetty,weblogic,WebSphere等应用服务器。对应的jar包为bboss-http.jar
http/https协议配置文件为
------------------------------------------------------------------
2010-09-03
------------------------------------------------------------------
o 直接通过pro的getBean方法获取引用组件对象空指针bug修复

------------------------------------------------------------------
2010-08-27
------------------------------------------------------------------
o 修复rest风格请求中对netty和rmi协议未处理的bug



3.bboss-persistent新增功能特性

o SQLExecutor组件中新增一组数据库操作api



o 新增从数据库中直接获取表元数据和所有表元数据的api

o 完善连接池、外部连接池监控相关信息获取方式,如果外部连接池对应的实际连接池如果是一个内部的连接池
那么外部连接池的启动时间,停用时间将直接是实际连接池的时间。


o 增加从配置文件启动连接池方法-使用方法参考测试用例com.frameworkset.common.Monitor
o 增加在sql语句中设置逻辑判断语句功能,例如:
PreparedDBUtil dbutil = new PreparedDBUtil();
String listRepositorySql = "select *  from CIM_ETL_REPOSITORY  where 1=1 " +
"#if($HOST_ID && !$HOST_ID.equals(\"\")) " +
" and HOST_ID = #[HOST_ID]" +
"#end  " +
" and PLUGIN_ID = #[PLUGIN_ID] " +
" and CATEGORY_ID = #[CATEGORY_ID] and APP = #[APP]";
String sql = listRepositorySql.toString();

try {
// 查询参数
SQLParams params = new SQLParams();
params.addSQLParam("HOST_ID", null,//设置host_id变量为的值Null或者空串""或者直接忽略添加该参数,那么语句中的and HOST_ID = #[HOST_ID]"将被忽略掉
   //"#if($HOST_ID && !$HOST_ID.equals(\"\")) " +
   //" and HOST_ID = #[HOST_ID]" +
   //"#end
SQLParams.STRING);
params.addSQLParam("PLUGIN_ID", "pluginid",
SQLParams.STRING);
params.addSQLParam("CATEGORY_ID", "catogoryid",
SQLParams.STRING);
params.addSQLParam("APP", "app", SQLParams.STRING);

dbutil.preparedSelect(params, "bspf",
sql);
// 执行查询
dbutil.executePrepared();



o 修改查询元数据缓冲机制,采用分连接池缓冲的机制,避免数据库之间的冲突

o SQLParams和Params类添加copy方法,对sql参数进行复制,以便在标签库中进行分页查询时,当页面记录数发生变化时保持sqlparams参数

4.bboss-taglib 标签库新增功能特性

------------------------------------------------------------------
2011-02-12
------------------------------------------------------------------

o 分页标签与mvc框架结合,通过mvc的控制器方法直接可以给分页标签提供数据
o 增加notcontain这notmatch两个正则表达式逻辑判断标签,和contain、match两个逻辑判断标签的功能相反

------------------------------------------------------------------
2010-09-03
------------------------------------------------------------------
。com.frameworkset.common.tag.pager.ObjectDataInfoImpl对象没有实现以下方法:
public long getItemCount()
public int getDataSize()
导致调用时抛出异常。

实现上述两个方法后,功能正常。
------------------------------------------------------------------
2010-09-03
------------------------------------------------------------------
o 分页标签增加设置页面size功能,火狐浏览器兼容性修改
修改程序:
frameworkset.jar
/bboss-tablib/src/com/frameworkset/common/tag/pager/tags/IndexTag.java
/bboss-tablib/src/com/frameworkset/common/tag/pager/tags/PagerContext.java
/bboss-tablib/src/com/frameworkset/common/tag/pager/tags/PagerDataSet.java
/bboss-tablib/src/com/frameworkset/common/tag/pager/tags/PagerTag.java
/bboss-tablib/webapp/include/pager_custom.js
/bboss-tablib/webapp/include/pager.js

标签定义文件/bboss-tablib/webapp/WEB-INF/pager-taglib.tld为index标签添加sizescope属性
<!--
设置页面显示记录范围,默认为
"5","10","20","30","40","50","60","70","80","90","100"
用户可以自定义这个范围,以逗号分隔即可
如果在pager标签和list标签上指定的maxPageItems属性对应的页面记录条数不在sizescope范围中,那么
将把maxPageItems作为第一个选项加入到sizescope中
-->
<attribute>
<name>sizescope</name>
<rtexprvalue>true</rtexprvalue>
</attribute>


使用jquery相关的样式,表格的鼠标移动与点击样式

------------------------------------------------------------------
2010-09-01
------------------------------------------------------------------
o 修改过滤器com.frameworkset.common.filter.CharacterEncodingHttpServletRequestWrapper,解决特定情况下中文乱码
比如:
发起请求:http://localhost:8080/test/test.jsp?key=多多
先执行以下语句
String values[] = request.getParameterValues("key");//得到的values为中文数组:{"多多"}
然后再执行以下语句
String values = request.getParameter("key");//得到的值为中文乱码


5.bboss event事件处理框架变化

修改执行事件监听器handle方法,修改远程事件处理逻辑
------------------------------------------------------------------
2010-09-26
------------------------------------------------------------------
o 修改执行事件监听器handle方法,增加对handle方法抛出的异常的处理
------------------------------------------------------------------
------------------------------------------------------------------
2010-09-13
------------------------------------------------------------------
o 修改测试用例,保持与aop框架的最新版本api同步(主要是jgroups的api发生了变化)
------------------------------------------------------------------
2010-08-30
------------------------------------------------------------------
o 修改异步事件处理,增加事件队列机制,防止事件堆积造成线程池处理忙的问题

/bbossevent/resources/event-service-assemble.xml增加以下属性配置event.block.queue.size
<property name="event.block.queue.size" value="200"/>
线程池event.threadpool的失败等待处理被设置为:
<property name="waitFailHandler" value="org.frameworkset.event.EventHandle$WaiterFailedHandler"/>


6.bboss-util 功能变化
o 修改 com/frameworkset/util/TransferObjectFactory.java中对象值拷贝不支持isXXXX方式获取属性值的问题
/bboss-util/src/com/frameworkset/util/TransferObjectFactory.java
----------------------------------------
bbossgroups-2.0-rc2 - 2010-11-28
----------------------------------------
o 完善ValueObjectUtil的getValue方法,避免因为调用get方法返回值为null后,重复查找Boolean方法的问题
增加getMethodByPropertyName方法,增加public static Object getValueByMethod(Object obj, Method method, Object[] params)方法
----------------------------------------
bbossgroups-2.0-rc2 - 2010-08-31
----------------------------------------
o 修复velocity模板没有正确初始化的问题,主要是在VelocityUtil上执行evalute时没有判别
  引擎是否已经初始化

----------------------------------------
bbossgroups-2.0-rc2 - 2010-08-23
----------------------------------------
o 修复com.frameworkset.util.VariableHandler中变量解析bug,
默认default_regex 修改为 "\\$\\{.+?)\\}"获取输入串中的变量,作为数组返回



------------------------------------------------------------------------------------************
release version : bbossgroups-2.0-RC1
release date: 2010/08/06
release files:Contain all sub projects source files,distribute files,All projects dependended jars,So the file size is some bigger,do not warry,every sub project can be downloaded alone.
release futures:

----------------------------------------
bboss-persistent - 2010-08-03
----------------------------------------
o 多数据库事务完善:
如果存在两个连接池bspf和mq上的一个事务,如果mq实际引用了bspf做为外部数据源,那么mq的对应子事务和bspf的子事务合并也就是说实际上
mq直接使用bspf的事务。
o 外部数据源监控信息完善,源数据加载完善,配置信息精简
<datasource external="true">

    <dbname>mq</dbname>
    <externaljndiName>jdbc/mysql-ds</externaljndiName>
<showsql>false</showsql>

  </datasource>
  <datasource external="true">
    <dbname>kettle</dbname>
  
    <externaljndiName>jdbc/mysql-ds</externaljndiName>
<showsql>false</showsql>
  </datasource>
 
 
----------------------------------------
bboss-persistent - 2010-07-23
----------------------------------------


o 增加to_char函数的适配,to_date函数适配,目前修改的有oracle,mysql
----------------------------------------
bboss-persistent - 2010-07-22
----------------------------------------
o 扩展db适配器数据库日期转换函数,增加指定转换日期格式参数方法
o 优化/bboss-persistent/src/com/frameworkset/common/poolman/management/BaseTableManager.java中加载tableinfo信息,uuid和sequence时无需计算表的最大值
o mysql 数据库适配器bug修改


------------------------------------------------------------------
bboss-aop 2010-07-26
------------------------------------------------------------------
o jgroups 加密和认证机制完善
o 增加在服务组件方法中获取客服端请求参数方法,增加RequestContext上下文处理类,用来获取客服端传递的系统参数
使用方法:
    public Object getParameter()
{
String value = RequestContext.getRequestContext().getStringParameter("parameterKey");
System.out.println("value:" + value);
return value;
}

------------------------------------------------------------------
bboss-aop 2010-07-23
------------------------------------------------------------------
o 修复严重错误,该问题表现为,对一个单实例的远程服务组件并发发起多个方法调用时会出现以下现象:
     请求响应结果丢失,一个rpc请求接收其他请求的结果,导致不可以预料的错误,比如类型转换错误
    

o 修改SQLUtil组件,增加变量替换功能
详细使用方法参考测试用例:org.frameworkset.spi.persistent.SQLUtilTest

o 修改cglib堆栈溢出bug
采用cglib ioc机制时,当组件配置了声明式事务,在执行的时候将报堆栈溢出错误。

o 新增/bbossaop/src/org/frameworkset/persitent/util/SQLUtil.java类
作用是可以管理sql语句,可以加载不同的配置sql文件,并提取其中的sql语句



------------------------------------------------------------------
bboss-taglib 2010-07-31
------------------------------------------------------------------
o 增加右键菜单项禁用的提示功能
------------------------------------------------------------------

各子项目新增功能和修改功能清单请参考每个项目中的readme.txt文件。

2
3
评论 共 8 条 请登录后发表评论
8 楼 yin_bp 2011-06-14 23:41
7 楼 yin_bp 2011-06-13 18:14
下次一定注意了,呵呵
6 楼 yin_bp 2011-06-13 18:13
确实挺长,应该只放和本次版本相关的change log,结果把以前版本的change log也放进来了,
5 楼 wendal 2011-06-13 13:37
这新闻还真长

不错,喜欢持续更新的项目
4 楼 hlylove 2011-06-13 13:00
挑重点发,后面的changelog我看可以去掉
3 楼 yin_bp 2011-06-13 11:28
感谢大家的评论,有什么想法和意见可以提出来,我继续改进,谢谢大家
2 楼 nplw668 2011-06-13 11:00
晕的,看了半天
1 楼 liu78778 2011-06-13 10:09
滚了半天鼠标

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • JAVA实现金额转换大写

    这段代码主要是解决一些在写EXCEL或者其他文件的时候,里面有金额或者其他的数字需要转换成大写

  • java人民币数字转大写汉字(小写转为大写).java

    人民币小写金额转为大写金额

  • JAVA----数字金额大写转换

    数字金额大写转换

  • Java人民币小写转大写字符串

    写了一个人民币小写转大写的方法,Java版本,思路很简单,没有测出什么Bug,有bug欢迎反馈 public class RMBChange { private static String[] nums = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; // 单位还可以往上 private static String[] unit = {"元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿"

  • 人民币转换工具

    //转换人民币大写 public class ChineseYuanUtil { /** * 汉语中数字大写 / private static final String[] CN_UPPER_NUMBER = { “零”, “壹”, “贰”, “叁”, “肆”, “伍”, “陆”, “柒”, “捌”, “玖” }; /* * 汉语中货币单位大写,这样的设计类似于占位符 / private static final String[] CN_UPPER_MONETRAY_UNIT = { “分”, “角”, “

  • 【Java】将数字金额转换为大写中文金额

    将数字金额转换为大写中文金额

  • Java 将数字转换为大写金额

    在网上搜了半天,发现知乎的这篇回答里面的代码写的不错。1.整数部分和小数部分都可能会有多余的“零”于是对代码进行了重写,测试了一下应该没有问题。2.没法根据参数 动态处理多余的小数。但是这个回答里面的代码存在两个问题。

  • java金额大小写转换/金额转大写/数字金额转换为中文大写金额

    java金额大小写转换/金额转大写/数字金额转换为中文大写金额

  • Java 描述将数字金额转换为中文大写

    【代码】Java 描述金额转换(数字转换成中文大写)

  • Java实现将数字转换成中文大写

    /**  *程序功能:支持将仟亿数字转换成中文数字表示,如(110.12 转换成壹佰壹拾元壹角贰分)  *算法思路:将数字,分成整数部分和小数部分(小数部分四舍五入到两位),分别进行转换,然后将转换后的结果合并后,生成最终结果 转换过程关键怎么处理中间的零,以及如何取单位。           */   public class ConverToChinesePart  { //需...

  • JAVA金额转换

    本文仅仅简单介绍了怎么解决转换金额问题。

  • 数字转汉字 金钱

    import java.math.BigDecimal; public class NumberToCN { /** * 汉语中数字大写 */ private static final String[] CN_UPPER_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌",

  • java语言输出金额x的中文大写形式字符串

    输出金额x的中文大写形式字符串,例如x=123.45,转化为“壹佰贰拾叁元肆角伍分” 自己写的,不是很完美,但是希望能够有所帮助 import java.util.Scanner; /** * 输入数字金额,以大写形式输出。已优化 * 有bug 当输入123.4时,出现的结果为壹佰贰拾叁元肆分 * 当输入123.45时,出现的结果为壹佰贰拾叁元肆角伍分 * @author xu

  • java实现数字转中文大写数字

    import java.util.HashMap;public class dds{ /** *  * 数字转中文 *  * @param list *  * @return */ private static String[] hanArr = { &quot;零&quot;, &quot;壹&quot;, &quot;贰&quot;, &quot;叁&quot;, &quot;肆&quot;, &quot;伍&quot;, &quot;陆&quot;, &quot;柒&quot;, &q

  • java实现将整数转化为中文大写金额

    在日常生活中,我们经常会将阿拉伯数字转化为中文大写的情况:"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾", "佰", "仟", "万", "亿",该篇博客实现了阿拉伯数字转化为中文大写金额

  • java实现人民币大写

    使用java实现对人民币大写处理,亲测可用!

  • 将数字转为中文金额的大写方式(Java版)

    将数字转为中文金额的大写方式(Java版) 博文链接:https://lovinchan.iteye.com/blog/202768

  • Java实现阿拉伯数字转换成中文大写数字,以及中文大写数字到阿拉伯数字的转换。

    学习王晓华老师的《算法的乐趣》一书中第四章之后,用Java重写并实现这一功能。 该文章是在学习完该章之后的一个学习总结,以供自己复习使用。 由于现在刚开始学习Java,为了熟悉Java的变成规范,因此,用Java实现这一功能。 public class NumberToChn { static String CHN_NUMBER[] = {"零", "一", "二", "三", "四

  • 金额换算(数字换汉字)

    /** * 金额数据中文格式化工具类 * * @since version1.0 */ public class MoneyToChinese { public MoneyToChinese() { super(); } private final static String HanDigiStr[] = new String[] { &quot;零&quot;, &quot;壹&quot;...

  • java 实现金额大小写转换

    把数字字符串转换为中文大写的字符串 Java代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

Global site tag (gtag.js) - Google Analytics